<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Admin\Manager;
use DB;
use function foo\func;

class ManagerController extends Controller
{
    //管理员列表展示
    public function index(Request $request) {
        if($request->expectsJson()) {
            // dd($request->all());
            // sleep(1);
            //使用渴求式加载来减少数据库查询次数
            //隐藏超级管理员
            $data = Manager::with('role:id,role_name')->where('id', '>', '1')->where('role_id', '!=', '50')->select('username','realname','telephone','status','id','created_at','istester','open_id','role_id','gender')->get()->each(function ($item){
                $item['telephone']=substr($item['telephone'],0,3).'****'.substr($item['telephone'],7,11);
            });
          
            $jsonData['data'] = $data;
            return response()->json($jsonData);
        }
        else {
            // $data = Manager::get();
            return view('admin.manager.index');
        }
    }

    //注册客户列表展示
    public function regClientIndex(Request $request) {
        if($request->expectsJson()) {
            //使用渴求式加载来减少数据库查询次数
            //隐藏超级管理员
            $data = Manager::with('role:id,role_name')->where('role_id', '=', '50')->get();
            $jsonData['data'] = $data;
            return response()->json($jsonData);
        }
        else {
            if(!config('constant.is_profession_ver')) {
                //标准版用户，无法使用此功能
                $bigTitle = "抱歉, 您无法使用此功能！";
                $littleTitle = "";
                return view('admin.manager.addLimit', compact('bigTitle', 'littleTitle'));
            }
            return view('admin.manager.regClientIndex');
        }
    }

    //管理员添加
    public function add(Request $request) {
        if($request->isMethod('POST')) {
            //编写验证规则
            $arr = [
                'username' => 'required|unique:manager',
                'password' => 'required'
            ];
            //进行验证
            $request->validate($arr);
            //如果验证通过，继续向下执行...
            $data = $request->only(['username', 'password', 'gender', 'telephone', 'realname']);
            $data['password'] = bcrypt($data['password']); //laravel默认的bcrypt加密
            // $data['password'] = md5(env("MD5_SALT") . $data['password']);
            $result = Manager::insert($data);
            return $result ? '1' : '0';
        }
        else {
            if(!config('constant.is_profession_ver')) {
                //标准版用户，限制管理员总数为10人 + admin
                $count = Manager::count();
                if($count >= 11) {
                    $bigTitle = "抱歉, 您无法继续添加用户！";
                    $littleTitle = "您的系统为标准版，用户数量不能超过10个";
                    return view('admin.manager.addLimit', compact('bigTitle', 'littleTitle'));
                }
            }
            return view('admin.manager.add');
        }
    }

    // ajax 验证 username 是否唯一（添加时）
    public function usernameCheckAdd(Request $request) {
        //帐号被占用
        $username = $request->input('username');
        $bool = Manager::where('username', $username)->get()->isEmpty();

        if($bool) {
            return 'true';
        }
        else {
            return 'false';
        }
    }

    //管理员删除
    public function del(Request $request) {

        $id = $request->id;
        if($id == 1) {
            //1为admin 超级管理员，禁止删除
            return '0';
        }

        if($id == auth('admin')->user()->id){
            return '不能删除自己的账号！';
        }

        //  delete 返回受影响的行数
        $result = Manager::where('id', $id)->delete();
        //由于框架自身不支持响应bool值，所以转化一种形式
        return $result >= 0 ? '1' : '删除失败！';
    }

    //解绑微信公众号
    public function unbindWechat(Request $request) {
        $id = auth('admin')->user()->id;

        //  delete 返回受影响的行数
        $result = Manager::where('id', $id)->update(['open_id' => '']);
        //由于框架自身不支持响应bool值，所以转化一种形式
        return $result >= 0 ? '1' : '0';
    }

    //管理员修改
    public function edit(Request $request) {
        $id = $request->id;
        if($id == 1) {
            //1为admin 超级管理员，禁止操作
            return '岂有此理，超级管理员你都敢动！！！';
        }
        if($request->isMethod('POST')) {
            //  sleep (3);//睡3秒
            $data = $request->only(['role_id', 'status', 'istester', 'partner', 'tester_code']);
            $roleOIds = $request->role_oids;
            if($roleOIds) {
                array_push($roleOIds, $data['role_id']);
                $data['role_ids'] = implode(',', $roleOIds);
            }
            else {
                $data['role_ids'] = $data['role_id'];
            }
            if($data['role_id'] == 1) {
                //1为 角色 超级管理员，禁止操作
                return '0';
            }
            //update 返回受影响的行数
            $result = Manager::where('id', $id)->update($data);
            //由于框架自身不支持响应bool值，所以转化一种形式
            return $result >= 0 ? '1' : '0';
        }
        else {
            //查询要修改的管理员信息
            $data = Manager::find($id);
            if($data) {
                //查到了结果
                //我们并不总是想要获取数据表的所有列，使用  select 方法，你可以为查询指定自定义的  select 子句
                $data_role = DB::table('role')->select('id', 'role_name')->where('id', '>', '1')->where('id', '!=', '50')->get();
                $role_ids = str_replace(','.$data->role_id.',', '', ','.$data->role_ids.',');
                $data->role_oids = explode(',', trim($role_ids, ','));
                return view('admin.manager.edit', compact('data', 'data_role'));
            }
            else {
                //未查到结果
                $error_title = '';
                $error_description = '当前记录已经删除 ~';

                $js = <<<eof
                    <script type="text/javascript">
                        parent.table_reload(0);//0停留在当前页，1回到第一页
                    </script>
eof;
                echo view('errors.error', compact('error_title', 'error_description'));
                return $js;
            }
        }
    }

    //注册客户修改
    public function regClientEdit(Request $request) {
        $id = $request->id;
        if($id == 1) {
            //1为admin 超级管理员，禁止操作
            return '岂有此理，超级管理员你都敢动！！！';
        }
        if($request->isMethod('POST')) {
            $data = $request->only(['client_name', 'client_addr', 'client_contact', 'client_tel', 'status']);
            //update 返回受影响的行数
            $result = Manager::where('id', $id)->update($data);
            //由于框架自身不支持响应bool值，所以转化一种形式
            return $result >= 0 ? '1' : '0';
        }
        else {
            //查询要修改的管理员信息
            $data = Manager::find($id);
            if($data) {
                //查到了结果
                //我们并不总是想要获取数据表的所有列，使用  select 方法，你可以为查询指定自定义的  select 子句
                return view('admin.manager.regClientEdit', compact('data'));
            }
            else {
                //未查到结果
                $error_title = '';
                $error_description = '当前记录已经删除 ~';

                $js = <<<eof
                    <script type="text/javascript">
                        parent.table_reload(0);//0停留在当前页，1回到第一页
                    </script>
eof;
                echo view('errors.error', compact('error_title', 'error_description'));
                return $js;
            }
        }
    }

    //管理员修改别人的密码
    public function editpass(Request $request) {
        $id = $request->id;
        if($id == 1) {
            //1为admin 超级管理员，禁止操作
            return '岂有此理，超级管理员你都敢动！！！';
        }

        if($request->isMethod('POST')) {
            //  sleep (3);//睡3秒

            //编写验证规则
            $arr = [
                'password' => 'required'
            ];
            //进行验证
            $request->validate($arr);
            //进行登录者的身份验证
            $data_login['username'] = auth('admin')->user()->username; //登录者的登录名
            // $data_login['password'] = md5(env("MD5_SALT") . $request->password_other); //登录者的密码
            $data_login['password'] = $request->password_other; //登录者的密码
            $res = auth('admin')->attempt($data_login);
            if(!$res) {
                //验证没通过
                return '2';
            }
            //如果验证通过，继续向下执行...
            $data['password'] = bcrypt($request->password);
            // $data['password'] = md5(env("MD5_SALT") . $request->password);
            //update 返回受影响的行数
            $result = Manager::where('id', $id)->update($data);
            //由于框架自身不支持响应bool值，所以转化一种形式
            return $result >= 0 ? '1' : '0';
        }
        else {
            //查询要修改的管理员信息
            $data = Manager::find($id);
            if($data) {
                //查到了结果
                return view('admin.manager.editpass', compact('data'));
            }
            else {
                //未查到结果
                $error_title = '';
                $error_description = '当前记录已经删除 ~';

                $js = <<<eof
                    <script type="text/javascript">
                        parent.table_reload(0);//0停留在当前页，1回到第一页
                    </script>
eof;
                echo view('errors.error', compact('error_title', 'error_description'));
                return $js;
            }
        }
    }

    //修改自己的个人信息
    public function editself(Request $request) {
        $id = auth('admin')->user()->id;
        if($request->isMethod('POST')) {
            // dd($request->all());
            //  sleep (3);//睡3秒
            $data = $request->only([
                'username', 'num', 'password2', 'telephone', 'depa', 'position', 'email', 'work_date', 'edu',
                'school', 'birth', 'zhicheng', 'chizheng', 'client_name', 'client_addr', 'client_contact', 'client_tel', 'tester_code','partner'
            ]);
            if(auth('admin')->user()->role_id !== 50) {
                $data['work_date'] = $data['work_date'] === '' ? null : $data['work_date'];
                $data['birth'] = $data['birth'] === '' ? null : $data['birth'];
            }
            // dd($data);
            //update 返回受影响的行数
            $result = Manager::where('id', $id)->update($data);
            //由于框架自身不支持响应bool值，所以转化一种形式
            return $result >= 0 ? $data['username'] : '0';
        }
        else {
            return view('admin.manager.editself');
        }
    }

    //修改自己的密码
    public function editpassself(Request $request) {
        $id = auth('admin')->user()->id;

        if($request->isMethod('POST')) {
            //  sleep (3);//睡3秒

            //编写验证规则
            $arr = [
                'password' => 'required'
            ];
            //进行验证
            $request->validate($arr);
            //进行登录者的身份验证
            $data_login['username'] = auth('admin')->user()->username; //登录者的登录名
            // $data_login['password'] = md5(env("MD5_SALT") . $request->oldpassword); //登录者的密码
            $data_login['password'] = $request->oldpassword; //登录者的密码
            $res = auth('admin')->attempt($data_login);
            if(!$res) {
                //验证没通过
                return '2';
            }
            //如果验证通过，继续向下执行...
            $data = [
                'password'=>bcrypt($request->password),
                'last_up_pwd'=>date('Y-m-d H:i:s'),
            ];
            // $data['password'] = md5(env("MD5_SALT") . $request->password);
            //update 返回受影响的行数
            $result = Manager::where('id', $id)->update($data);
            //由于框架自身不支持响应bool值，所以转化一种形式
            return $result >= 0 ? '1' : '0';
        }
        else {
            return view('admin.manager.editpassself');
        }
    }

    // ajax 验证 username 是否唯一
    public function usernameCheck(Request $request) {
        //帐号被占用
        $username = $request->username;

        $data = Manager::where('username', $username)->where('id', '<>', auth('admin')->user()->id)->first();
        $bool = !$data;

        if($bool) {
            return 'true'; //验证通过
        }
        else {
            return 'false'; //验证不通过
        }
    }

    // ajax 验证 num 工号 是否唯一
    public function numCheck(Request $request) {
        //帐号被占用
        $num = $request->num;

        $data = Manager::where('num', $num)->where('id', '<>', auth('admin')->user()->id)->first();
        $bool = !$data;

        if($bool) {
            return 'true'; //验证通过
        }
        else {
            return 'false'; //验证不通过
        }
    }

    //切换角色
    public function changeRole($id) {
        $user = auth('admin')->user();
        if(strstr(','.$user->role_ids.',', ','.$id.',') > - 1) {
            $res = DB::table('manager')->where('id', $user->id)->update(['role_id' => $id]);
            return intval($res);
        }
        return 0;
    }
}
